' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.10.26.02.14]) on 2023.11.03 at 00:34 (Coordinated Universal Time)
' "Ghost Game" by Charlie Veniot
' Based on the "40 Line Game Revised" by b+, mod of some game 2022-03-18 new way to score
_Title "Ghost Game"

Dim As Long sw, sh, goalR, hx, hy, i, hits, score, stars, nEnemies
sw = 640: sh = 480: nEnemies = 35: goalR = -1: hx = 10: hy = 400 ' hero stuff (you)
ghostWidth% = 20
ghostHeight% = 18

Dim EX(nEnemies), EY(nEnemies), EC(nEnemies) As  Long ' enemy stuff
DIM eyeDirection%(nEnemies), ghostEyeball$(nEnemies), ghostIris$(nEnemies), irisColor&(nEnemies)

_INITAUDIO
SCREEN _NEWIMAGE(sw, sh, 32)

ghostBod$ = _
  ".......XXXXXX......." + _
  ".....XXXXXXXXXX....." + _
  "...XXXXXXXXXXXXXX..." + _
  "..XXXXXXXXXXXXXXXX.." + _
  ".XXXXXXXXXXXXXXXXXX." + _
  ".XXXXXXXXXXXXXXXXXX." + _
  ".XXXXXXXXXXXXXXXXXX." + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXXXXXXXXXXXXXXXXXXX" + _
  "XXX..XXXX..XXXX..XXX" + _
  "XX....XX....XX....XX" + _
  "XX....XX....XX....XX"
  
ghostEyeballLeft$ = _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  "..XXXX.....XXXX....." + _
  "XXXXXXX..XXXXXXX...." + _
  "X...XXX..X...XXX...." + _
  "X...XXX..X...XXX...." + _
  "X...XXX..X...XXX...." + _
  ".XXXXX....XXXXX....." + STRING$(8*20,".")
  
ghostEyeballRight$ = _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  ".....XXXX.....XXXX.." + _
  "....XXXXXXX..XXXXXXX" + _
  "....XXX...X..XXX...X" + _
  "....XXX...X..XXX...X" + _
  "....XXX...X..XXX...X" + _
  ".....XXXXXX...XXXXXX" + STRING$(8*20,".")
  
ghostIrisLeft$ = _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  ".XXX......XXX......." + _
  ".XXX......XXX......." + _
  ".XXX......XXX......." + STRING$(8*20,".")
  
ghostIrisRight$ = _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  "...................." + _
  ".......XXX......XXX." + _
  ".......XXX......XXX." + _
  ".......XXX......XXX." + STRING$(8*20,".")



For i = 1 To 1000
    PSet (Int(Rnd * sw), Int(Rnd * sh)), _RGB32(55 + Rnd * 200, 55 + Rnd * 200, 55 + Rnd * 200)
Next
PCOPY 0 , 1

For i = 1 To nEnemies
    EX(i) = Int(Rnd * (sw - 20) + 10): EY(i) = -2 * sh * Rnd + sh: EC(i) = _RGB32(55 + Rnd * 200, 55 + Rnd * 200, 55 + Rnd * 200)
    eyeDirection% = INT(RND*2)
    ghostEyeball$(i) = IFF(eyeDirection%,ghostEyeballLeft$,ghostEyeballRight$)
    ghostIris$(i) = IFF(eyeDirection%,ghostIrisLeft$,ghostIrisRight$)
    irisColor&(i) = IFF(INT(RND*2), &h0000FF, &h964B00)
Next
     
Do
    thisKey$ = inkey$
    Cls
    PCOPY 1, 0
    Print "Hits:"; hits, "Score:"; score
    Line (hx - 10, hy - 10)-Step(20, 20), &hFFFF00, B
    If hx >= sw - 13 And goalR Then score = score + 100: goalR = 0
    If hx <= 13 And goalR = 0 Then score = score + 100: goalR = -1
    For i = 1 To nEnemies ' the enemies
       ' Circle (EX(i), EY(i)), 10, EC(i)
       FOR thisY = 1 TO ghostHeight%
            FOR thisX = 1 TO ghostWidth%
                IF MID$(ghostBod$, (thisY-1) * ghostWidth% + thisX, 1) <> "." THEN PSET (EX(i)+thisX, EY(i)+thisY), EC(i)
                IF MID$(ghostEyeball$(i), (thisY-1) * ghostWidth% + thisX, 1) <> "." THEN PSET (EX(i)+thisX, EY(i)+thisY), &hFFFFFF
                IF MID$(ghostIris$(i), (thisY-1) * ghostWidth% + thisX, 1) <> "." THEN PSET (EX(i)+thisX, EY(i)+thisY), irisColor&(i)
            NEXT thisX
        NEXT thisY
        If Sqr((EX(i) + 10 - hx) ^ 2 + (EY(i) + 9 - hy) ^ 2) < 20 Then 'collision
            Sound 2000, 3: hits = hits + 1
            EX(i) = Int(Rnd * 600 + 20): EY(i) = -_Height * Rnd ' move that bad boy!
            If hits = 10 Then Print "Too many hits, goodbye!": _Delay 10
        End If
        EY(i) = EY(i) + Int(Rnd * 5)
        If EY(i) > 461 Then EX(i) = Int(Rnd * 600 + 20): EY(i) = -sh * Rnd
    Next
    If thisKey$ = CHR$(0)+CHR$(80) Then hy = hy + 4
    If thisKey$ = CHR$(0)+CHR$(72) Then hy = hy - 4
    If thisKey$ = CHR$(0)+CHR$(75) Then hx = hx - 4
    If thisKey$ = CHR$(0)+CHR$(77) Then hx = hx + 4
    If hx < 10 Then hx = 10
    If hx > sw - 10 Then hx = sw - 10
    If hy < 10 Then hy = 10
    If hy > sh - 10 Then hy = sh - 10
    _Display
Loop